TouchToolKit for WinForms
ズームのイベント
TouchToolKit の使い方 > C1Zoomコンポーネント > ズームのイベント

C1Zoomコンポーネントでは、次のイベントを使用してズーム時の処理をカスタマイズできます。

名前 説明
ControlAutoShowing C1Zoomコンポーネントがターゲットコントロールの表示を開始する前に発生します。
ControlBoundsZooming C1Zoomコンポーネントがターゲットコントロールの境界のズームを開始する前に発生します。
ControlFontZooming C1Zoomコンポーネントがターゲットコントロールのフォントのズームを開始する前に発生します。
ManipulationStarting マニピュレーションプロセッサが最初に作成されたときに発生します。
ZoomFactorChanged ZoomFactorプロパティが変更されたときに発生します。

コントロールが自動スクロールされるときのイベント

C1Zoom.ControlAutoShowingイベントを使用すると、C1Zoomコンポーネントによってフォームが自動的にスクロールされる際に、コントロールの情報やスクロールが発生した理由によってこれをキャンセルするかどうかを制御できます。たとえば、コントロールが一定サイズ表示されている場合は自動スクロールしない、といった処理が可能です。

Visual Basic コードの書き方

Visual Basic
コードのコピー
Imports C1.Win.C1TouchToolKit

Private Sub C1Zoom1_ControlAutoShowing(sender As System.Object, e As ControlAutoShowingEventArgs) Handles C1Zoom1.ControlAutoShowing
    ' コントロールがすべて表示されているときは自動スクロールをしません。
    If C1Zoom1.GetDisplayRectangle(e.Showingcontrol).Size = e.ShowingControl.Size Then
        e.Cancel = True
    End If

    ' コントロールの一部が表示されているときは自動スクロールをしません。
    If C1Zoom1.GetDisplayRectangle(e.ShowingControl).IsEmpty Then
        e.Cancel = True
    End If

    ' コントロールの高さが30ピクセル以上表示されているときは自動スクロールをしません。
    If C1Zoom1.GetDisplayRectangle(e.ShowingControl).Size.Height > 30 Then
        e.Cancel = True
    End If
End Sub

C# コードの書き方

C#
コードのコピー
using C1.Win.C1TouchToolKit;

private void gcZoom1_ControlAutoShowing(object sender, ControlAutoShowingEventArgs e)
{
    // コントロールがすべて表示されているときは自動スクロールをしません。
    if (gcZoom1.GetDisplayRectangle(e.ShowingControl).Size == e.ShowingControl.Size)
    {
        e.Cancel = true;
    }

    // コントロールの一部が表示されているときは自動スクロールをしません。
    if (!gcZoom1.GetDisplayRectangle(this.button1).IsEmpty)
    {
        e.Cancel = true;
    }

    // コントロールの高さが30ピクセル以上表示されているときは自動スクロールをしません。
    if (gcZoom1.GetDisplayRectangle(this.button1).Size.Height > 30)
    {
        e.Cancel = true;
    }
}

ズームの検出

C1Zoom.ControlBoundsZoomingイベントを使用して、コントロールのズームを検出できます。また、C1Zoom.ControlFontZoomingイベントを使用してフォントのズームを検出できます。

通常、ユーザー定義のズームの動作を複数のプロジェクト間で共有するにはZoomPolicyが適しています。詳細は「ズームとコントロール」を参照してください。

C1Zoom.ControlBoundsZoomingイベントでは、組み込みのズーム処理をキャンセルしてユーザー定義のコードをコントロールに対して実行できます。

Visual Basic コードの書き方

Visual Basic
コードのコピー
Imports C1.Win.C1TouchToolKit

Private Sub C1Zoom1_ControlBoundsZooming(sender As System.Object, e As ControlBoundsZoomingEventArgs) Handles C1Zoom1.ControlBoundsZooming
    If e.TargetControl Is Button1 Then
        e.Handled = True
    End If
End Sub

C# コードの書き方

C#
コードのコピー
using C1.Win.C1TouchToolKit;

private void gcZoom1_ControlBoundsZooming(object sender, ControlBoundsZoomingEventArgs e)
{
    if (e.TargetControl == button1)
    {
        e.Handled = true;
    }
}

C1Zoom.ControlFontZoomingイベントでは組み込みのフォントズームをキャンセルしてユーザー定義のコードを実装できます。このイベントで対象のコントロールのフォントをカスタマイズする場合、対象のコントロールのフォントに明示的にフォントが指定されている必要があります。フォントが指定されていない場合、親コントロールのフォントが使用されます。また、C1Zoom.InnerPanelプロパティに一致するコントロールは除外される必要があります。

Visual Basic コードの書き方

Visual Basic
コードのコピー
Imports C1.Win.C1TouchToolKit

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    Button1.Font = New Font("MS UI Gothic", 9.0F)
End Sub

Private Sub C1Zoom1_ControlFontZooming(sender As System.Object, e As ControlFontZoomingEventArgs) Handles C1Zoom1.ControlFontZooming
    If e.TargetControl Is Button1 Then
        e.Handled = True
    End If
End Sub

C# コードの書き方

C#
コードのコピー
using C1.Win.C1TouchToolKit;

private void Form1_Load(new Font("MS UI Gothic" , 9.0f);
}

private void gcZoom1_ControlFontZooming(object sender, ControlFontZoomingEventArgs e)
{
    if (e.TargetControl == button1)
    {
        e.Handled = true;
    }
}

タッチ操作が開始されたときのイベント

C1Zoom.ManipulationStartingイベントを使用すると、タッチ操作でズームやスクロール(パン)が開始されたときに、この処理を実行するかどうかを変更できます。たとえば、フォーム画面のスクロールよりもListBoxコントロールのスクロールを優先したい場合、次のようにコーディングします。

Visual Basic コードの書き方

Visual Basic
コードのコピー
Imports C1.Win.C1TouchToolKit

Private Sub C1Zoom1_ManipulationStarting(sender As System.Object, e As ZoomManipulationStartingEventArgs) Handles C1Zoom1.ManipulationStarting
    If TypeOf e.TargetControl Is TextBox AndAlso DirectCast(e.TargetControl, TextBox).Text.Length > 0 Then
        e.Mode = ZoomManipulationModes.Zoom
    Else
        e.Mode = ZoomManipulationModes.All
    End If
End Sub

C# コードの書き方

C#
コードのコピー
using C1.Win.C1TouchToolKit;

private void gcZoom1_ManipulationStarting(object sender, ZoomManipulationStartingEventArgs e)
{
    if (e.TargetControl is ListBox)
    {
        e.Mode = ZoomManipulationModes.Zoom;
    }
    else
    {
         e.Mode = ZoomManipulationModes.All;
    }
}

TextBoxコントロールに文字列が存在する場合だけ、フォームのスクロールよりもTextBoxコントロール上の操作を優先する、といった細かな組み合わせも実装できます。

Visual Basic コードの書き方

Visual Basic
コードのコピー
Private Sub C1Zoom1_ManipulationStarting(sender As System.Object, e As C1.Win.C1TouchToolKit.ZoomManipulationStartingEventArgs) Handles C1Zoom1.ManipulationStarting
    If TypeOf e.TargetControl Is TextBox AndAlso DirectCast(e.TargetControl, TextBox).Text.Length > 0 Then
        e.Mode = C1.Win.C1TouchToolKit.ZoomManipulationModes.Zoom
    Else
        e.Mode = C1.Win.C1TouchToolKit.ZoomManipulationModes.All
    End If
End Sub

C# コードの書き方

C#
コードのコピー
private voidz gcZoom1_ManipulationStarting(object sender, C1.Win.C1TouchToolKit.ZoomManipulationStartingEventArgs e)
{
    if (e.TargetControl is TextBox && ((TextBox)e.TargetControl).Text.Length > 0)
    {
        e.Mode = C1.Win.C1TouchToolKit.ZoomManipulationModes.Zoom;
    }
    else
    {
        e.Mode = C1.Win.C1TouchToolKit.ZoomManipulationModes.All;
    }
}

ズーム率が変わった時のイベント

C1Zoom.ZoomFactorChangedイベントを使用すると、ズーム率が変わったときに処理を実行できます。たとえば、次のコードように現在のズーム率をタイトルバーに表示できます。

Visual Basic コードの書き方

Visual Basic
コードのコピー
Private Sub C1Zoom1_ZoomFactorChanged(sender As System.Object, e As System.EventArgs) Handles C1Zoom1.ZoomFactorChanged
    Me.Text = String.Format("{0:P}", C1Zoom1.ZoomFactor)
End Sub

C# コードの書き方

C#
コードのコピー
private void gcZoom1_ZoomFactorChanged(object sender, EventArgs e)
{
    this.Text = string.Format("{0:P}", gcZoom1.ZoomFactor);
}